From 58008fe221c5b16695359221d921020401459aaa Mon Sep 17 00:00:00 2001 From: oliskoli Date: Wed, 2 Apr 2008 18:15:44 +0000 Subject: [PATCH] osm: Tweak some warnings on 64-bit linux. --- gpsbabel/osm.c | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/gpsbabel/osm.c b/gpsbabel/osm.c index cc717b5a3..2196f2063 100644 --- a/gpsbabel/osm.c +++ b/gpsbabel/osm.c @@ -408,21 +408,29 @@ static osm_icon_mapping_t osm_icon_mappings[] = { static void osm_features_init(void) { - int i; + /* here we take a union because of warnings + "cast to pointer from integer of different size" + on 64-bit systems */ + union { + const void *p; + int i; + } x; keys = avltree_init(0, MYNAME); values = avltree_init(0, MYNAME); + x.p = NULL; + /* the first of osm_features is a place holder */ - for (i = 1; osm_features[i]; i++) - avltree_insert(keys, osm_features[i], (void *)i); + for (x.i = 1; osm_features[x.i]; x.i++) + avltree_insert(keys, osm_features[x.i], x.p); - for (i = 0; osm_icon_mappings[i].value; i++) { + for (x.i = 0; osm_icon_mappings[x.i].value; x.i++) { char buff[128]; - buff[0] = osm_icon_mappings[i].key; - strncpy(&buff[1], osm_icon_mappings[i].value, sizeof(buff) - 1); - avltree_insert(values, buff, (void *)&osm_icon_mappings[i]); + buff[0] = osm_icon_mappings[x.i].key; + strncpy(&buff[1], osm_icon_mappings[x.i].value, sizeof(buff) - 1); + avltree_insert(values, buff, (const void *)&osm_icon_mappings[x.i]); } } @@ -431,10 +439,13 @@ static char osm_feature_ikey(const char *key) { int result; - const void *data; + union { + const void *p; + int i; + } x; - if (avltree_find(keys, key, &data)) - result = (int)data; + if (avltree_find(keys, key, &x.p)) + result = x.i; else result = -1; @@ -447,13 +458,13 @@ osm_feature_symbol(const char ikey, const char *value) { char *result; char buff[128]; - const void *data; + osm_icon_mapping_t *data; buff[0] = ikey; strncpy(&buff[1], value, sizeof(buff) - 1); - if (avltree_find(values, buff, &data)) - result = xstrdup(((osm_icon_mapping_t *)data)->icon); + if (avltree_find(values, buff, (void *)&data)) + result = xstrdup(data->icon); else xasprintf(&result, "%s:%s", osm_features[(int)ikey], value); -- 2.30.2